<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    //把函数当做返回值，记得在返回前调用函数
    let fn1=function(a,b){
        console.log('调用fn1');
        return a+b;
    }

    function fn2(f){
        console.log("调用fn2");
        return f;
    }
    console.log(fn2(fn1(1,2)));

    console.log('------------------------------------');
    //作用域：作用的范围
    //var和let的区别：
    // 1.var可以重复声明（变量名可以相同），而let不允许。
    // 2.var可以先使用，再声明变量（声明提升），而let必须先声明再使用，如果未声明直接使用会造成暂时性死区，导致使用时无法访问变量。
    // 3.var和let都有全局作用域和函数作用域，但let多了一个块作用域。
    var num1=10;
    let num2=20;
    console.log(num1);
    console.log(num2);

    var num1='hhhhh';
    console.log(num1);
    console.log(num2);

    console.log('------------------------------------');
    //js运行分两个部分：
    //1.解析（编译）：语法检查、声明变量和函数
    //2.执行：变量赋值、依据执行顺序执行代码
    console.log(x);
    // console.log(y);
    var x=10;    //(1)var x;  (2)console.log(x);   (3)x=10;   声明提升
    // let y=20;    //(1)let y;  (2)console.log(x);   (3)y=20;   暂时性死区
    
    console.log('------------作用域-------------');
    //全局作用域
    let a=1;
    var b=2;
    function myfun(){
        //函数作用域：局部变量
        let c=3;
        var d=4;
        console.log(a);
        console.log(b);
        console.log(c); 
        console.log(d);
    }
    myfun();

    console.log(a);
    console.log(b);
    console.log(c); //局部作用域：局部变量,在全局范围中无法访问
    console.log(d); //局部作用域：局部变量,在全局范围中无法访问
    // 块作用域
    for(var i=0;i<3;i++){
        console.log('i'+i);
    }
    console.log(i);
</script>
</html>